Antenna Array
socp
FICO-Xpress
AMPL
short
= 0;
################################################################
# Note: sin(theta) is used instead of cos(theta) because antenna
# is taken to lie on the imaginary axis
################################################################
var G_real {theta in DEGS}
= sum {k in N} (
w_real[k] * cos(2*pi*y[k]*sin(rpd*theta)/lambda)
-
w_imag[k] * sin(2*pi*y[k]*sin(rpd*theta)/lambda)
)
;
var G_imag {theta in DEGS}
= sum {k in N} (
w_real[k] * sin(2*pi*y[k]*sin(rpd*theta)/lambda)
+
w_imag[k] * cos(2*pi*y[k]*sin(rpd*theta)/lambda)
)
;
minimize beampattern: 100*t;
subject to t_bnds {theta in DEGS1}:
G_real[theta]^2 + G_imag[theta]^2 <= t^2;
subject to G_bnds {theta in DEGS023: theta not in DEGS_EQUALITY}:
(G_real[theta]^2 + G_imag[theta]^2)/up_bnd[theta]^2 <= 1;
subject to normalization_real: G_real[theta0] = G0_real[theta0];
subject to normalization_imag: G_imag[theta0] = G0_imag[theta0];
subject to equality_constrs_real {theta in DEGS_EQUALITY}:
G_real[theta] = G0_real[theta];
subject to equality_constrs_imag {theta in DEGS_EQUALITY}:
G_imag[theta] = G0_imag[theta];
data;
let lambda := 2;
let spacing := 0.56*lambda;
let theta0 := 6.5;
let {theta in DEGS0 union DEGS3} up_bnd[theta] := 10^(-27.3/20);
let n := 24;
let {k in N} y[k] := (k-1)*spacing;
data;
param w0_real :=
1 -0.0238
2 -0.0894
3 -0.148
4 -0.1
5 -0.0943
6 -0.219
7 -0.3589
8 -0.205
9 0.307
10 0.831
11 0.952
12 0.660
13 0.276
14 0.0815
15 0.0356
16 -0.0442
17 -0.163
18 -0.202
19 -0.148
20 -0.0885
21 -0.075
22 -0.0911
23 -0.0518
24 -0.0191
;
param w0_imag :=
1 -0.0275
2 -0.0251
3 0.039
4 0.092
5 0.0643
6 0.0671
7 0.0299
8 0.685
9 0.86
10 0.556
11 -0.341
12 -0.459
13 -0.524
14 -0.406
15 -0.339
16 -0.332
17 -0.27
18 -0.132
19 -0.0294
20 -0.0197
21 -0.0314
22 -0.0027
23 0.0256
24 0.0303
;
let {theta in DEGS2}
up_bnd[theta] := sqrt(G0_real[theta]^2 + G0_imag[theta]^2);
param maxG0 := max {theta in DEGS2} up_bnd[theta];
let {k in N} w0_real[k] := w0_real[k]/maxG0;
let {k in N} w0_imag[k] := w0_imag[k]/maxG0;
let {k in N} w_real[k] := w0_real[k]/2;
let {k in N} w_imag[k] := w0_imag[k]/2;
let t := 0;
#let {theta in DEGS1} t_bnds[theta] := -1;
#let {theta in DEGS023: theta not in DEGS_EQUALITY} G_bnds[theta] := -1;
let {theta in DEGS2} up_bnd[theta] := 1.01*up_bnd[theta]/maxG0;
#option loqo_options "timing=1 verbose=2 convex sigfig=5";
#option minos_options "timing=1 superbasics=3000";
#option lancelot_options "timing=1";
solve;
printf: "\n" > ant.out;
printf {theta in DEGS}: "%5.1f %10.3f \n",
theta,
10*log10(abs(G_real[theta]^2 + G_imag[theta]^2))
>> ant.out;
printf: "\n" > ant0.out;
printf {theta in DEGS0}: "%5.1f %10.3f \n",
theta, 20*log10(abs(up_bnd[theta]))
>> ant0.out;
printf {theta in DEGS1}: "%5.1f %10.3f \n",
theta, 20*log10(abs(t))
>> ant0.out;
printf {theta in DEGS2}: "%5.1f %10.3f \n",
theta, 20*log10(abs(up_bnd[theta]))
>> ant0.out;
printf {theta in DEGS3}: "%5.1f %10.3f \n",
theta, 20*log10(abs(up_bnd[theta]))
>> ant0.out;
]]>
This is the linear array beam pattern problem described in:
H. Lebret and S. Boyd, "Antenna Array Pattern Synthesis via
Convex Optimization", IEEE Trans on Signal Processing, 45, 526-532, 1997.